<!DOCTYPE html>
<title>Tests mouse interactions on a non-custom composited root scrollbar thumb.</title>
<script src="../../../resources/testharness.js"></script>
<script src="../../../resources/testharnessreport.js"></script>
<script src="../../../resources/gesture-util.js"></script>
<script src="../../../resources/scrollbar-util.js"></script>
<body style="height: 1000px; width: 1000px">
<script>
if (window.internals)
    internals.settings.setScrollAnimatorEnabled(false);

window.onload = () => {
  const TRACK_WIDTH = calculateScrollbarThickness();
  const BUTTON_WIDTH = TRACK_WIDTH;
  const onMacPlatform =  navigator.userAgent.search(/\bMac OS X\b/) != -1;

  promise_test (async () => {
    await waitForCompositorCommit();
    resetScrollOffset(document.scrollingElement);

    // Testing the vertical scrollbar thumb.
    let x = window.innerWidth - TRACK_WIDTH / 2;
    let y = BUTTON_WIDTH + 10;
    let asc_increments = [25, 10, 35, 7, 23];
    let asc_offsets = [45, 64, 128, 141, 183];
    let asc_offsets_mac = [43, 60, 121, 133, 173];

    let desc_increments = [33, 11, 21, 5, 30];
    let desc_offsets = [122, 102, 64, 55, 0];
    let desc_offsets_mac = [116, 97, 60, 52, 0];

    await mouseMoveTo(x, y);
    await mouseDownAt(x, y);

     // Scroll down
    for (var i = 0; i < 5; i++){
      y += asc_increments[i];
      await mouseMoveTo(x, y, Buttons.LEFT);
      const offset = onMacPlatform ? asc_offsets_mac[i] : asc_offsets[i];
      if (internals.runtimeFlags.fractionalScrollOffsetsEnabled) {
        assert_approx_equals(window.scrollY, offset, 1,
          "Vertical thumb drag downwards did not scroll as expected at "+asc_increments[i]+" - ");
      } else {
        assert_equals(window.scrollY, offset,
          "Vertical thumb drag downwards did not scroll as expected at "+asc_increments[i]+" - ");
      }
    };

    // Scroll up
    for (var i = 0; i < 5; i++){
      y -= desc_increments[i];
      await mouseMoveTo(x, y, Buttons.LEFT);
      const offset = onMacPlatform ? desc_offsets_mac[i] : desc_offsets[i];
      if (internals.runtimeFlags.fractionalScrollOffsetsEnabled) {
        assert_approx_equals(window.scrollY, offset, 1,
          "Vertical thumb drag upwards did not scroll as expected at "+desc_increments[i]+" - ");
      } else {
        assert_equals(window.scrollY, offset,
          "Vertical thumb drag upwards did not scroll as expected at "+desc_increments[i]+" - ");
      }
    };

    await mouseUpAt(x, y);
    assert_equals(window.scrollY, 0, "Mouseup on vertical scrollbar thumb is not expected to scroll.");

    // Since the horizontal scrolling is essentially the same codepath as vertical,
    // this need not be tested in the interest of making the test run faster.
  }, "Test mouse drags in increments on non-custom composited root scrollbar thumb.");
}
</script>
</body>
